package com.cskaoyan.javase.oop1._9static._0introduction._old;

/**
 * @description: static关键字的引入
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 *  练习：
 * 	创建一个学生类，用来描述我们班全体同学，要求
 * 		属性：姓名，性别，年龄，学号，学校信息
 * 		行为：吃饭，学习
 *
 * 在创建该类对象时,我们发现学校信息都是一致的,有重复定义,有改进的空间:
 * 1. 无论创建多少Student对象，由于该类描述的是我们班全体同学，他们的班级信息实际上是一样的
 * 2. 创建多次对象，需要重复的给一个属性赋相同的值，这是很麻烦的，不方便的
 * 3. **学校信息这个属性实质上应该是被全体同学所共有的属性，而不是独属于某个对象的**
 *
 * 如何改进?
 *      1.直接显式赋值写死,是可以实现功能的
 *      2.直接写死构造器
 * 以上都是可以实现功能的,但是仍然有缺点:
 *      1.学校信息这个属性不应该属于某个对象,以上改进仍然属于对象,每个对象都有成员变量浪费空间,时间上也有损耗
 *      2.更重要的我们希望这个属性不是属于某一个对象的，而是一种类的特征，是属于类的，是属于全体对象所共享的
 *
 * 要实现以上改进就必须使用static关键字:
 *      static修饰的东西就不再属于对象了,而属于类,换句话说,是属于全体对象所共享的
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //创建学生对象
        Student s1 = new Student("张三", "女", "王道训练营");
        Student s2 = new Student("李四", "男", "王道训练营");
        Student s3 = new Student("麻子", "男", "王道训练营");
    }
}

//定义学生类
class Student {
    String name;
    //关于性别成员变量的定义,推荐使用String类型
    //除此之外,很多程序员喜欢使用布尔类型的isMale/isFemale
    //boolean isMale; 不建议使用这种形式定义性别(因为在某些极少情况下会导致错误)
    //boolean isFemale;
    String gender;
    int age;
    int stuId;
    String schoolName;

    public void eat(){
        System.out.println("吃饭!");
    }
    public void study(){
        System.out.println("学习");
    }
    public void sleep(){
        System.out.println("睡觉");
    }

    public Student() {
    }

    public Student(String name, String gender, String schoolName) {
        this.name = name;
        this.gender = gender;
        this.schoolName = "王道训练营";
    }
}